package expression

import "fmt"

type User struct {
	name string
	age  int
}

func (u *User) TestU() {
	fmt.Println(u)
}

func (u User) TestU1() {
	fmt.Println(u)
}

func Test() {
	u := &User{"zhangsan", 23}
	//u1 := User{"zhangsan", 23}
	//u.TestU()

	// 表达式, TestU1方法生成表达式，会直接复制一个u，后面修改了属性并不影响；
	// 不管u是值类型，还是指针类型，都会被copy
	test := u.TestU1
	test()

	//u.age = 24
	//fmt.Println(u)

	// 表达式 传递指针
	//test1 := (*User).TestU
	//test1(u) // u是一个指针实例

	// 表达式 传递值
	//test2 := User.TestU1
	//test2(u1) // u1是一个值类型
}
